package org.zjx.window.action;


import org.zjx.window.window.IWindow;

/**
 * 动作命令接口
 * 定义所有可执行动作的契约，支持窗口绑定和激活权管理
 *
 * @author zjx
 * @since 1.0
 */
public interface IAction {

    /**
     * 获取动作名称
     * 用于日志记录和调试识别
     *
     * @return 动作的名称，不应为null或空字符串
     */
    String getActionName();

    /**
     * 获取绑定的目标窗口
     * 动作将在该窗口上执行
     *
     * @return 绑定的窗口实例，不应为null
     */
    IWindow getTargetWindow();

    /**
     * 检查是否需要激活窗口权限
     * 如果需要激活权，执行前会确保窗口处于激活状态
     *
     * @return 如果需要激活窗口返回true，否则返回false
     */
    boolean isRequiresActiveWindow();

    /**
     * 执行动作命令
     * 具体的业务逻辑在此方法中实现
     *
     * @return 执行是否成功
     * @throws InterruptedException 如果执行过程中线程被中断
     * @throws RuntimeException 如果执行过程中发生其他错误
     */
    boolean execute() throws InterruptedException;
}